import observe from "./observe";
import Dep from './Dep'

export default function defineReactive(obj, key, value) {
  const dep = new Dep();

  if (arguments.length == 2) {
    value = obj[key];
  }
  //// 子元素要进行observe，至此形成了递归。
  //   这个递归不是函数自己调用自己，而是多个函数、类循环调用
  //   console.log("我在工作了", value);
  let childOb = observe(value);

  Object.defineProperty(obj, key, {
    // 可枚举
    enumerable: true,
    // 可以被配置，比如可以被delete
    configurable: true,
    get() {
      console.log(`你在读取${key}属性`);
      return value;
    },
    set(newValue) {
      console.log(`你在读取${key}属性，修改的值为${newValue}`);
      value = newValue;
      childOb = observe(newValue);
      dep.notify();
    }
  });
}
